# 文件操作
# 打开一个文件，语法open（“文件路径”，打开模式）
f=open("testfile.txt","w",encoding="UTF-8")
f.write("这是一个测试文件")
#  打开一个文件之后，一定要关闭，否则后面无法继续操作这个文件。
f.close()

# with 语句，不管在处理文件过程中是否发生异常，都能保证 with 语句执行完毕后已经关闭打开的文件句柄。
with open("testfile.txt","r",encoding="UTF-8") as f:
    print(f.read())
    pass
# 文件写入
# 打开模式为wb，以二进制的打开文件用于读写操作的模式
# 在进行调用write方法向文件中写入内容时，需要指定编码格式
file1=open("TestFile2.txt","wb")
file1.write("床前明月光\n".encode("UTF-8"))
file1.write("疑是地上霜\n".encode("UTF-8"))
file1.close()
# 打开模式为a,在文件末尾进行追加写入
file2=open("TestFile3.txt","a",encoding="UTF-8")
file2.write("床前明月光\n")
file2.write("疑是地上霜\n")
file2.writelines(["举头望明月\n","低头思故乡\n"])
file2.close()

# 读取文件
file2=open("TestFile3.txt","r",encoding="UTF-8")
# context=file2.read()   #将全部内容读取出来
context=file2.read(2)   #可以指定读取内容多少
print(context)
context=file2.read(2)   # 第二次读取将从第一次读取的位置继续读取
print(context)
context=file2.read()
print(context)
file2.close()

# 读取文件
# rb 以二进制方式进行读取文件，需要对文件进行解码
file3=open("TestFile3.txt","rb")
# context=file2.read()   #将全部内容读取出来
#  可以指定读取内容多少,三个字符，能够解析为一个中文汉字，所以进行读取的过程，要为3的倍数
context=file3.read(3)
print(context.decode("UTF-8"))
context=file3.read(3)   # 第二次读取将从第一次读取的位置继续读取
print(context)
context=file3.read()
print(context)
file3.close()

file4=open("TestFile3.txt","r",encoding="UTF-8")
# readline一次读取一行内容
# context=file4.readline()   #将全部内容读取出来
# readlines 一次性读取全部内容，将结果以列表的方式返回
context=file4.readlines()
print(context)
file4.close()

# 总结
# 文件读取的几种操作方式
# read   r rb  r+  rb+
# r r+只读，用于普通读取场景
# rb rb+ 二进制方式读取，适用于文件 图片 音频 视频 等文件的读取
# 文件写入的几种操作方法
# write w w+ wb wb+ a ab
# w wb w+打开文件时，若没有文件，会新建，若文件存在，写入内容时，会覆盖原内容
# 二进制读写的时候，要注意编码问题，默认情况下，我们写入文件的编码是gbk
# a ab a+ 在原有的文件基础之后进行追加写入

# 课堂练习，文件备份操作，将一个已经存在的文件，进行备份，备份后的文件要和源文件的内容完全一致



